import re


class RePattern(object):

    @classmethod
    def re_name_splite(cls, delimiters: list, text: str):
        """
        人名任务数据分割，将数据分割成一条一条的
        delimiters: 用来分割的list
        text:需要分割的文本
        :return:
        """
        # 使用正向查找来分割文本
        delimiter_pattern = f'({"|".join(map(re.escape, delimiters))})'
        # 按照delimiters list里的数据分割，并且list里面的数据单独作为一个字符串在list中
        split_text = re.split(delimiter_pattern, text)

        # 最终结果
        result_list = []
        # 单个结果
        current_segment = ""
        # 合并delimiters数据到后面一条数据
        for segment in split_text:
            if segment in delimiters:
                if current_segment:
                    result_list.append(current_segment)
                current_segment = segment
            else:
                current_segment += segment

        if current_segment:
            result_list.append(current_segment)

        return result_list

    @classmethod
    def extract_square_bracket_contents(cls, input_string):
        """
        ([^)]+)：这是一个分组，用于捕获括号内的内容。它包含以下部分：

        [^)]：这是一个字符类，匹配除右括号 ) 之外的任何字符。^ 在字符类内部表示取反，所以这个部分匹配任何不是右括号的字符。
        +：这是一个量词，表示匹配一个或多个前面的表达式（也就是 [^)]）。
        综合起来，([^)]+) 匹配一个或多个不是右括号的字符，并捕获这些字符作为一个分组。
        """
        # 使用正则表达式来提取中括号内的内容
        pattern = r'\[([^]]+)\]'
        matches = re.findall(pattern, input_string)
        return matches

    @classmethod
    def extract_square_parentheses_contents(cls, input_string):
        # 使用正则表达式来提取括号内的内容
        pattern = r'\(([^)]+)\)'
        matches = re.findall(pattern, input_string)
        return matches

    @classmethod
    def remove_numbers(cls, input_string):
        # 使用正则表达式将数字替换为空字符串
        result = re.sub(r'\d', '', input_string)
        return result

    @classmethod
    def number_to_espacio(cls, input_string):
        # 将数字替换成 空格
        return re.sub(r'\d+', ' ', input_string)

    @classmethod
    def is_author_id(cls, input_string):
        """
        匹配作品库的作者id结构
        :return:
        """
        pattern = r"^Ａ\d+(\[.+\])?$"
        match = re.match(pattern, input_string)

        if match:
            return True
        else:
            return False

    @classmethod
    def is_page_id(cls, input_string):
        """
        匹配作品库的作者id结构  Y + 数字 + 可能存在一位字母
        :return:
        """
        # pattern = r"(Y\d+[a-zA-Z]?)$"  # 等待确认 先更改正则
        pattern = r"(Y\d+[a-zA-Z]?(\d{2})?)$"  # 可能存在一个字母，字母存在后面可能跟两位数字
        # pattern = r"(.*?Y[a-zA-Z0-9]+)$"
        match = re.match(pattern, input_string)
        if match:
            return True
        else:
            return False

    @classmethod
    def is_c0_tag(cls, input_string):
        """
        匹配行是否为卷id 即 Ｃ0
        :return:
        """
        pattern = r"^(Ｃ0)$"
        match = re.match(pattern, input_string)
        if match:
            return True
        else:
            return False

    @classmethod
    def is_c1_tag(cls, input_string):
        """
        匹配行是否为c1 即 Ｃ0
        :return:
        """
        pattern = r"^(Ｃ1)$"
        match = re.match(pattern, input_string)
        if match:
            return True
        else:
            return False

    @classmethod
    def is_cn_tag(cls, input_string):
        """
        匹配行是否为卷c+num 即 Ｃ2 c3 c4 ....
        :return:
        """
        if cls.is_c0_tag(input_string):
            return False
        pattern = r"^(Ｃ\d)$"
        match = re.match(pattern, input_string)
        if match:
            return True
        else:
            return False

    @classmethod
    def is_paragraph_tag(cls, input_string):
        """
        判断是否为段落标识
        :return:
        """

        pattern = r"(^＃|^ＣX|^Ｄ|^┌)[0-9]*"
        match = re.match(pattern, input_string)
        if match:
            return True
        else:
            return False

    @classmethod
    def is_table_start(cls, input_string):
        """
        判断改行是否为表头
        """
        pattern = r"(^＃┌|^┌)"
        match = re.match(pattern, input_string)
        if match:
            return True
        else:
            return False

    @classmethod
    def is_table_middle(cls, input_string):
        """
        判断改行是否为表头
        """
        pattern = r"(^＃│|^│|^＃├|^├)"
        match = re.match(pattern, input_string)
        if match:
            return True
        else:
            return False

    @classmethod
    def is_table_end(cls, input_string):
        """
        判断改行是否为表头
        """
        pattern = r"(^＃└|^└)"
        match = re.match(pattern, input_string)
        if match:
            return True
        else:
            return False

    @classmethod
    def get_paragraph_tag(cls, input_string):
        """
        判断是否为段落标识
        :return:
        """
        pattern = r"(^＃|^ＣX|^Ｄ)[0-9]*"
        match = re.match(pattern, input_string)
        if match:
            return match.group()
        else:
            return False

    @classmethod
    def is_source_tag(cls, input_string):
        """
        是否是出处
        :return:
        """
        pattern = r"(^\(.*\))$"
        match = re.match(pattern, input_string)
        if match:
            char_count = 0
            for index, char in enumerate(input_string):
                if char == "(":
                    char_count = char_count + 1
                if char == ")":
                    char_count = char_count - 1
                if char_count == 0 and index < len(input_string) - 1:
                    return False
                if char_count < 0:  # 也一扎而為兩書也)入鈞金﹒(三十斤為鈞金謂﹒剛也入金耴其剛 这种情况
                    return False
            return True
        else:
            return False
